package com.ip.user.models.service;

import com.ip.user.models.vo.SysPermissionVO;
import com.ip.user.models.vo.SysUserGroupVO;
import com.ip.user.models.vo.UserVO;

import java.util.List;
import java.util.Set;

/**
 * 权限服务接口
 */
public interface PermissionService {
    
    /**
     * 获取用户的所有权限编码
     * @param userId 用户ID
     * @return 权限编码集合
     */
    Set<String> getUserPermissions(Integer userId);
    
    /**
     * 检查用户是否具有指定权限
     * @param userId 用户ID
     * @param permissionCode 权限编码
     * @return 是否具有权限
     */
    boolean hasPermission(Integer userId, String permissionCode);
    
    /**
     * 获取用户所属的所有用户组
     * @param userId 用户ID
     * @return 用户组列表
     */
    List<SysUserGroupVO> getUserGroups(Integer userId);
    
    /**
     * 获取用户组的所有权限
     * @param groupId 用户组ID
     * @return 权限列表
     */
    List<SysPermissionVO> getGroupPermissions(Integer groupId);
    
    /**
     * 为用户组分配权限
     * @param groupId 用户组ID
     * @param permId 权限ID
     * @return 是否分配成功
     *
    boolean assignPermissionToGroup(Integer groupId, Integer permId);
    */
    /**
     * 为用户组设置权限（先删除所有权限，再重新分配）
     * @param groupId 用户组ID
     * @param permIds 权限ID列表
     * @return 是否设置成功
     */
    boolean setGroupPermissions(Integer groupId, List<Integer> permIds);
    
    /**
     * 设置用户的用户组（先移除用户当前所有用户组，再添加到指定用户组）
     * @param userId 用户ID
     * @param groupIds 用户组ID列表，如果为null或空列表则表示移除所有用户组
     * @return 是否设置成功
     */
    boolean setUserGroups(Integer userId, List<Integer> groupIds);
    
    /**
     * 为用户分配班级特定权限
     * @param userId 用户ID
     * @param classId 班级ID
     * @param permCode 权限编码
     * @return 是否分配成功
     *
    boolean assignClassPermissionToUser(Integer userId, Integer classId, String permCode);
    */
    /**
     * 获取所有用户组（仅管理员可用）
     * @param userId 用户ID（用于验证管理员权限）
     * @return 所有用户组列表
     */
    List<SysUserGroupVO> getAllUserGroups(Integer userId);
    
    /**
     * 获取所有权限列表
     * @return 所有权限列表
     */
    List<SysPermissionVO> getAllPermissions();
}